Completed
Push — master ( ab2f31...c8ba67 )
by Alejandro
24s queued 10s
created

ShortUrlsRowMenu.js ➔ render   B

Complexity

Conditions 2

Size

Total Lines 53
Code Lines 53

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 53
dl 0
loc 53
ccs 9
cts 9
cp 1
rs 8.5381
c 0
b 0
f 0
cc 2
crap 2

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
import { faImage as pictureIcon } from '@fortawesome/free-regular-svg-icons';
2
import {
3
  faTags as tagsIcon,
4
  faChartPie as pieChartIcon,
5
  faEllipsisV as menuIcon,
6
  faQrcode as qrIcon,
7
  faMinusCircle as deleteIcon,
8
  faEdit as editIcon,
9
  faLink as linkIcon,
10
} from '@fortawesome/free-solid-svg-icons';
11
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
12
import React from 'react';
13
import { ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';
14
import { serverType } from '../../servers/prop-types';
15
import { shortUrlType } from '../reducers/shortUrlsList';
16
import { useToggle } from '../../utils/helpers/hooks';
17
import PreviewModal from './PreviewModal';
18
import QrCodeModal from './QrCodeModal';
19
import VisitStatsLink from './VisitStatsLink';
20
import './ShortUrlsRowMenu.scss';
21
22 1
const propTypes = {
23
  selectedServer: serverType,
24
  shortUrl: shortUrlType,
25
};
26
27 1
const ShortUrlsRowMenu = (DeleteShortUrlModal, EditTagsModal, EditMetaModal, EditShortUrlModal, ForServerVersion) => {
28 8
  const ShortUrlsRowMenuComp = ({ shortUrl, selectedServer }) => {
29 14
    const [ isOpen, toggle ] = useToggle(false);
30 14
    const [ isQrModalOpen, toggleQrCode ] = useToggle(false);
31 14
    const [ isPreviewModalOpen, togglePreview ] = useToggle(false);
32 14
    const [ isTagsModalOpen, toggleTags ] = useToggle(false);
33 14
    const [ isMetaModalOpen, toggleMeta ] = useToggle(false);
34 14
    const [ isDeleteModalOpen, toggleDelete ] = useToggle(false);
35 14
    const [ isEditModalOpen, toggleEdit ] = useToggle(false);
36 14
    const completeShortUrl = shortUrl && shortUrl.shortUrl ? shortUrl.shortUrl : '';
37
38 14
    return (
39
      <ButtonDropdown toggle={toggle} isOpen={isOpen}>
40
        <DropdownToggle size="sm" caret outline className="short-urls-row-menu__dropdown-toggle">
41
          &nbsp;<FontAwesomeIcon icon={menuIcon} />&nbsp;
42
        </DropdownToggle>
43
        <DropdownMenu right>
44
          <DropdownItem tag={VisitStatsLink} selectedServer={selectedServer} shortUrl={shortUrl}>
45
            <FontAwesomeIcon icon={pieChartIcon} fixedWidth /> Visit stats
46
          </DropdownItem>
47
48
          <DropdownItem onClick={toggleTags}>
49
            <FontAwesomeIcon icon={tagsIcon} fixedWidth /> Edit tags
50
          </DropdownItem>
51
          <EditTagsModal shortUrl={shortUrl} isOpen={isTagsModalOpen} toggle={toggleTags} />
52
53
          <ForServerVersion minVersion="1.18.0">
54
            <DropdownItem onClick={toggleMeta}>
55
              <FontAwesomeIcon icon={editIcon} fixedWidth /> Edit metadata
56
            </DropdownItem>
57
            <EditMetaModal shortUrl={shortUrl} isOpen={isMetaModalOpen} toggle={toggleMeta} />
58
          </ForServerVersion>
59
60
          <ForServerVersion minVersion="2.1.0">
61
            <DropdownItem onClick={toggleEdit}>
62
              <FontAwesomeIcon icon={linkIcon} fixedWidth /> Edit long URL
63
            </DropdownItem>
64
            <EditShortUrlModal shortUrl={shortUrl} isOpen={isEditModalOpen} toggle={toggleEdit} />
65
          </ForServerVersion>
66
67
          <DropdownItem onClick={toggleQrCode}>
68
            <FontAwesomeIcon icon={qrIcon} fixedWidth /> QR code
69
          </DropdownItem>
70
          <QrCodeModal url={completeShortUrl} isOpen={isQrModalOpen} toggle={toggleQrCode} />
71
72
          <ForServerVersion maxVersion="1.x">
73
            <DropdownItem onClick={togglePreview}>
74
              <FontAwesomeIcon icon={pictureIcon} fixedWidth /> Preview
75
            </DropdownItem>
76
            <PreviewModal url={completeShortUrl} isOpen={isPreviewModalOpen} toggle={togglePreview} />
77
          </ForServerVersion>
78
79
          <DropdownItem divider />
80
81
          <DropdownItem className="short-urls-row-menu__dropdown-item--danger" onClick={toggleDelete}>
82
            <FontAwesomeIcon icon={deleteIcon} fixedWidth /> Delete short URL
83
          </DropdownItem>
84
          <DeleteShortUrlModal shortUrl={shortUrl} isOpen={isDeleteModalOpen} toggle={toggleDelete} />
85
        </DropdownMenu>
86
      </ButtonDropdown>
87
    );
88
  };
89
90 8
  ShortUrlsRowMenuComp.propTypes = propTypes;
91
92 8
  return ShortUrlsRowMenuComp;
93
};
94
95
export default ShortUrlsRowMenu;
96